BigQueryのJDBCドライバ接続でロケーションを固定する
はじめに
データアナリティクス事業本部のkobayashiです。
BigQueryでJDBCドライバを使ってクエリを実行する際にロケーションを固定して実行したい場面がありました。そのような際にJDBCのURLの設定方法を調べたのでその内容をまとめます。
JDBCドライバでロケーションを固定する
はじめに今回使うJDBCドライバのバージョンは1.5.4.1008
を使用しています。また認証方法はOAuthType=1
でユーザーアカウント認証(User Account Authentication)を使用しているとします。この場合ロケーションを指定しない場合のJDBC URLは以下になります。
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId={Project ID};OAuthType=1;
ここでロケーションの固定をするのですが、BigQueryのJDBCドライバのドキュメント(BiqQuery JDBCドライバ | インストールと構成ガイド )を読むとConnector Configuration OptionsにLocationの項目がありドキュメントを参考にするとLocation=asia-northeast1;
をJDBC URLに追加すればいいことがわかるのでこれを追加します。
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId={Project ID};OAuthType=1;Location=asia-northeast1;
では、ロケーションを設定していない状態とロケーションを固定してある状態でクエリを実行してみます。
実行するクエリは Cloud KMS による列レベルの暗号化 | BigQuery | Google Cloud で紹介されている「ラップされた鍵セットを作成する」のクエリになります。
SELECT KEYS.NEW_WRAPPED_KEYSET(
'gcp-kms://projects/{プロジェクトID}/locations/asia-northeast1/keyRings/bq_col_encrypt_keyring/cryptoKeys/bq_col_encrypt_key',
'DETERMINISTIC_AEAD_AES_SIV_CMAC_256');
このクエリではCloud KMSでラップされた鍵セットを作るのですが、Cloud KMSのリソースがasia-northeast1なのでクエリを実行する際にもasia-northeast1で実行する必要があります。
はじめにロケーションを固定しない状態でクエリを実行してみます。
> SELECT KEYS.NEW_WRAPPED_KEYSET(
'gcp-kms://projects/{プロジェクトID}/locations/asia-northeast1/keyRings/bq_col_encrypt_keyring/cryptoKeys/bq_col_encrypt_key',
'DETERMINISTIC_AEAD_AES_SIV_CMAC_256') as WRAPPED_KEYSET_ENCODED;
Incompatible CryptoKey location. Resource location: us, Key location: asia-northeast1; error in KEYS.NEW_WRAPPED_KEYSET expression
となりクエリが失敗します。メッセージからクエリがusロケーションが実行されたのでasia-northeast1にあるCloud KMSのリソースにアクセスできなかった事がわかります。
次にロケーションを固定した状態でクエリを実行してみます。
> SELECT KEYS.NEW_WRAPPED_KEYSET(
'gcp-kms://projects/{プロジェクトID}/locations/asia-northeast1/keyRings/bq_col_encrypt_keyring/cryptoKeys/bq_col_encrypt_key',
'DETERMINISTIC_AEAD_AES_SIV_CMAC_256') as WRAPPED_KEYSET_ENCODED;
| WRAPPED\_KEYSET\_ENCODED |
| :--- |
| 0x0A240082D4CD8496946E2B1331567A66AA2CA799923F6C42E03FC5C275675EACE2F64C54F63512B7010049613915F5ED2B66E3514F5865E741E3F896F7C7F39D1F010EE0E170AEA69FEDEA8BD0... |
とクエリが正常に実行されてラップされた鍵セットが返ってきます。
まとめ
BigQueryのJDBCドライバでロケーションを固定してクエリを実行しました。それほど使う場面は多くないですが、特定のクエリではロケーションを固定する必要があるためそのような際には必須の設定になります。
最後まで読んで頂いてありがとうございました。